/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * pnfMantenimientoUsuario.java
 *
 * Created on Oct 18, 2011, 10:33:04 PM
 */

package visual.Seguridad;

import bentity.bePerfil;
import bentity.beUsuario;
import blogic.blLog;
import blogic.blPerfil;
import blogic.blUsuario;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author renzo
 */
public class pnfMantenimientoUsuario extends javax.swing.JPanel {
    int ANCHO_PANEL_SECUNDARIO = 300;
    private beUsuario usuario = null;
    /** Creates new form pnfMantenimientoUsuario */
    public pnfMantenimientoUsuario(beUsuario usuario) {

        try {
            initComponents();
            this.usuario = usuario;

            //Llenar combo de Perfil
            blPerfil gestorPerfiles = new blPerfil();
            ArrayList<bePerfil> listaPerfiles = new ArrayList<bePerfil>();
            listaPerfiles = gestorPerfiles.queryAll();

            cboPerfil.addItem("Todos");
            for (int i=0; i<listaPerfiles.size(); i++){
                cboPerfil.addItem(listaPerfiles.get(i).getDescripcion());
            }
        }
        catch (Exception e) {
            e.printStackTrace();
            System.out.print(e.getMessage());
            visualHelper.mostrarMensajeError("Ocurrió un error en la búsqueda de Perfil");
        }

    }

    public void establecerPanelInicio(){

        int width = this.getToolkit().getScreenSize().width;
        int height = this.getToolkit().getScreenSize().height;

        this.setLayout(null);
        this.setBounds(0,0,width-this.ANCHO_PANEL_SECUNDARIO,height);

        this.lblTitulo.setLocation(this.getSize().width/2 - this.lblTitulo.getSize().width/2, 70);
        this.pnlBusqueda.setLocation(this.getSize().width/2 - this.pnlBusqueda.getSize().width/2, 120);
        this.tblUsuario.setLocation(this.getSize().width/2 - this.tblUsuario.getSize().width/2, 120+480);

        this.btnModificar.setLocation(this.getSize().width/2 - this.btnModificar.getSize().width/2, 800);

        int aux = this.getSize().width/2 - this.tblUsuario.getX()/2;
        this.btnRegistrar.setLocation((this.btnModificar.getX()-this.getX())/2 - this.btnRegistrar.getSize().width/2, 800);

//        this.lblTitulo1.setLocation(this.pnlInicio.getSize().width/2 - this.lblTitulo1.getSize().width/2, 100);
//        this.lblTitulo2.setLocation(this.pnlInicio.getSize().width/2 - this.lblTitulo2.getSize().width/2, 200);
//        this.imgInicio.setLocation(this.pnlInicio.getSize().width/2 - this.imgInicio.getSize().width/2, 300);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pnlInicio = new javax.swing.JPanel();
        lblTitulo1 = new javax.swing.JLabel();
        imgInicio = new javax.swing.JLabel();
        lblTitulo2 = new javax.swing.JLabel();
        jPanel2 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();
        jPanel4 = new javax.swing.JPanel();
        pnlInicio1 = new javax.swing.JPanel();
        lblTitulo3 = new javax.swing.JLabel();
        imgInicio1 = new javax.swing.JLabel();
        lblTitulo4 = new javax.swing.JLabel();
        panel1 = new java.awt.Panel();
        lblTitulo = new javax.swing.JLabel();
        pnlBusqueda = new javax.swing.JPanel();
        lblPerfil = new javax.swing.JLabel();
        cboPerfil = new javax.swing.JComboBox();
        lblCargo = new javax.swing.JLabel();
        txtCargo = new javax.swing.JTextField();
        txtNombre = new javax.swing.JTextField();
        btnBuscar = new javax.swing.JButton();
        lblNombre1 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblUsuario = new javax.swing.JTable();
        btnRegistrar = new javax.swing.JButton();
        btnModificar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        lblNombre = new javax.swing.JLabel();

        lblTitulo1.setFont(new java.awt.Font("DejaVu Sans", 0, 36));
        lblTitulo1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblTitulo1.setText("Sistema de Gestión de Almacenes");
        lblTitulo1.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        lblTitulo1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        lblTitulo1.setName("lblTitulo1"); // NOI18N

        imgInicio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/thorstore logo1costado.png"))); // NOI18N

        lblTitulo2.setFont(new java.awt.Font("DejaVu Sans", 0, 36));
        lblTitulo2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblTitulo2.setText("Thor Store");
        lblTitulo2.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        lblTitulo2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);

        javax.swing.GroupLayout pnlInicioLayout = new javax.swing.GroupLayout(pnlInicio);
        pnlInicio.setLayout(pnlInicioLayout);
        pnlInicioLayout.setHorizontalGroup(
            pnlInicioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlInicioLayout.createSequentialGroup()
                .addGroup(pnlInicioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pnlInicioLayout.createSequentialGroup()
                        .addGap(80, 80, 80)
                        .addComponent(lblTitulo1))
                    .addGroup(pnlInicioLayout.createSequentialGroup()
                        .addGap(274, 274, 274)
                        .addComponent(lblTitulo2))
                    .addGroup(pnlInicioLayout.createSequentialGroup()
                        .addGap(244, 244, 244)
                        .addComponent(imgInicio)))
                .addContainerGap(113, Short.MAX_VALUE))
        );
        pnlInicioLayout.setVerticalGroup(
            pnlInicioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlInicioLayout.createSequentialGroup()
                .addGap(30, 30, 30)
                .addComponent(lblTitulo1)
                .addGap(18, 18, 18)
                .addComponent(lblTitulo2)
                .addGap(60, 60, 60)
                .addComponent(imgInicio)
                .addContainerGap(150, Short.MAX_VALUE))
        );

        lblTitulo3.setFont(new java.awt.Font("DejaVu Sans", 0, 36));
        lblTitulo3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblTitulo3.setText("Sistema de Gestión de Almacenes");
        lblTitulo3.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        lblTitulo3.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        lblTitulo3.setName("lblTitulo1"); // NOI18N

        imgInicio1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/thorstore logo1costado.png"))); // NOI18N

        lblTitulo4.setFont(new java.awt.Font("DejaVu Sans", 0, 36));
        lblTitulo4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblTitulo4.setText("Thor Store");
        lblTitulo4.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        lblTitulo4.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);

        javax.swing.GroupLayout pnlInicio1Layout = new javax.swing.GroupLayout(pnlInicio1);
        pnlInicio1.setLayout(pnlInicio1Layout);
        pnlInicio1Layout.setHorizontalGroup(
            pnlInicio1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlInicio1Layout.createSequentialGroup()
                .addGroup(pnlInicio1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pnlInicio1Layout.createSequentialGroup()
                        .addGap(80, 80, 80)
                        .addComponent(lblTitulo3))
                    .addGroup(pnlInicio1Layout.createSequentialGroup()
                        .addGap(274, 274, 274)
                        .addComponent(lblTitulo4))
                    .addGroup(pnlInicio1Layout.createSequentialGroup()
                        .addGap(244, 244, 244)
                        .addComponent(imgInicio1)))
                .addContainerGap(113, Short.MAX_VALUE))
        );
        pnlInicio1Layout.setVerticalGroup(
            pnlInicio1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlInicio1Layout.createSequentialGroup()
                .addGap(30, 30, 30)
                .addComponent(lblTitulo3)
                .addGap(18, 18, 18)
                .addComponent(lblTitulo4)
                .addGap(60, 60, 60)
                .addComponent(imgInicio1)
                .addContainerGap(150, Short.MAX_VALUE))
        );

        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        setPreferredSize(new java.awt.Dimension(808, 520));
        setLayout(null);

        lblTitulo.setFont(new java.awt.Font("Dialog", 0, 36));
        lblTitulo.setForeground(new java.awt.Color(0, 0, 0));
        lblTitulo.setText("Mantenimiento de usuario");
        add(lblTitulo);
        lblTitulo.setBounds(230, 60, 500, 43);

        pnlBusqueda.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Búsqueda de usuarios", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 14), new java.awt.Color(0, 0, 0))); // NOI18N
        pnlBusqueda.setLayout(null);

        lblPerfil.setFont(new java.awt.Font("Dialog", 0, 12));
        lblPerfil.setForeground(new java.awt.Color(0, 0, 0));
        lblPerfil.setText("Perfil");
        pnlBusqueda.add(lblPerfil);
        lblPerfil.setBounds(30, 90, 31, 15);

        cboPerfil.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        pnlBusqueda.add(cboPerfil);
        cboPerfil.setBounds(110, 90, 320, 25);

        lblCargo.setFont(new java.awt.Font("Dialog", 0, 12));
        lblCargo.setForeground(new java.awt.Color(0, 0, 0));
        lblCargo.setText("Cargo");
        pnlBusqueda.add(lblCargo);
        lblCargo.setBounds(30, 40, 50, 15);

        txtCargo.setFont(new java.awt.Font("Dialog", 0, 12));
        pnlBusqueda.add(txtCargo);
        txtCargo.setBounds(110, 40, 320, 25);

        txtNombre.setFont(new java.awt.Font("Dialog", 0, 12));
        pnlBusqueda.add(txtNombre);
        txtNombre.setBounds(110, 140, 320, 25);

        btnBuscar.setBackground(new java.awt.Color(240, 235, 226));
        btnBuscar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnBuscar.setForeground(new java.awt.Color(0, 0, 0));
        btnBuscar.setText("Buscar");
        btnBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarActionPerformed(evt);
            }
        });
        pnlBusqueda.add(btnBuscar);
        btnBuscar.setBounds(180, 180, 110, 27);

        lblNombre1.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        lblNombre1.setForeground(new java.awt.Color(0, 0, 0));
        lblNombre1.setText("Nombre");
        pnlBusqueda.add(lblNombre1);
        lblNombre1.setBounds(30, 140, 50, 15);

        add(pnlBusqueda);
        pnlBusqueda.setBounds(230, 120, 470, 230);

        tblUsuario.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Codigo", "Cargo", "Nombre", "Perfil"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblUsuario.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        tblUsuario.getTableHeader().setReorderingAllowed(false);
        jScrollPane1.setViewportView(tblUsuario);

        add(jScrollPane1);
        jScrollPane1.setBounds(230, 400, 470, 170);

        btnRegistrar.setBackground(new java.awt.Color(240, 235, 226));
        btnRegistrar.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        btnRegistrar.setForeground(new java.awt.Color(0, 0, 0));
        btnRegistrar.setText("Registrar");
        btnRegistrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRegistrarActionPerformed(evt);
            }
        });
        add(btnRegistrar);
        btnRegistrar.setBounds(260, 600, 110, 27);

        btnModificar.setBackground(new java.awt.Color(240, 235, 226));
        btnModificar.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        btnModificar.setForeground(new java.awt.Color(0, 0, 0));
        btnModificar.setText("Modificar");
        btnModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificarActionPerformed(evt);
            }
        });
        add(btnModificar);
        btnModificar.setBounds(410, 600, 110, 27);

        btnEliminar.setBackground(new java.awt.Color(240, 235, 226));
        btnEliminar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnEliminar.setForeground(new java.awt.Color(0, 0, 0));
        btnEliminar.setText("Eliminar");
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });
        add(btnEliminar);
        btnEliminar.setBounds(560, 600, 110, 27);

        lblNombre.setFont(new java.awt.Font("Dialog", 0, 14)); // NOI18N
        lblNombre.setForeground(new java.awt.Color(0, 0, 0));
        lblNombre.setText("Usuarios");
        add(lblNombre);
        lblNombre.setBounds(230, 370, 90, 15);
    }// </editor-fold>//GEN-END:initComponents

    private void btnRegistrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRegistrarActionPerformed
        dlgRegistrarUsuario rgu = new dlgRegistrarUsuario(null, true, this.usuario);
        rgu.setVisible(true);
}//GEN-LAST:event_btnRegistrarActionPerformed

    private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarActionPerformed
        // TODO add your handling code here:        
        this.consultarUsuariosPorFiltros();
}//GEN-LAST:event_btnBuscarActionPerformed

    private void consultarUsuariosPorFiltros(){
        String strPerfil;
        ArrayList<beUsuario> listaUsuarios;
        blPerfil gestorPerfiles = new blPerfil();
        try{
            String cargo = this.txtCargo.getText();            
            String nombre = this.txtNombre.getText();
            blUsuario gestorUsuarios = new blUsuario();

            strPerfil = this.cboPerfil.getSelectedItem().toString();

            if (strPerfil.equals("Todos")){
               listaUsuarios = gestorUsuarios.obtenerUsuarios(cargo, nombre, 0);
            }
            else{
                bePerfil perfil = gestorPerfiles.queryByNombre(strPerfil);
                int idPerfil = perfil.getId();
                listaUsuarios = gestorUsuarios.obtenerUsuarios(cargo, nombre, idPerfil);
            }

            DefaultTableModel dtm = (DefaultTableModel)this.getTblUsuario().getModel();
            this.limpiarTabla(dtm);

            if (listaUsuarios.isEmpty())
                JOptionPane.showMessageDialog(this, "La búsqueda no arrojó resultados.", "Información", JOptionPane.INFORMATION_MESSAGE);
            else
                this.llenarTabla(listaUsuarios);
        }
        catch (Exception e){
            e.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un error en la búsqueda");
        }
    }

    private void llenarTabla(ArrayList<beUsuario> listaUsuarios) {
        DefaultTableModel dtm = (DefaultTableModel)this.getTblUsuario().getModel();
        String [] columnas = {"Codigo","Cargo","Nombre","Perfil"};
        dtm.setColumnIdentifiers(columnas);
        String [] datos = new String [4];
        blPerfil gestorPerfiles = new blPerfil();
        
        try{     
            for(int i=0;i<listaUsuarios.size();i++){
                datos[0] = String.valueOf(listaUsuarios.get(i).getIdUsuario());
                datos[1] = listaUsuarios.get(i).getCargo();
                datos[2] = listaUsuarios.get(i).getNombre();

                bePerfil perfil = gestorPerfiles.queryById(listaUsuarios.get(i).getIdPerfil());
                datos[3] = perfil.getDescripcion();
                dtm.addRow(datos);
            }
        }catch (Exception e){
            e.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un error en la búsqueda.");
        }

        this.tblUsuario.setRowSelectionAllowed(true);
        this.tblUsuario.setColumnSelectionAllowed(false);
        this.tblUsuario.setModel(dtm);
    }

    private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModificarActionPerformed
        // TODO add your handling code here:        
        if (this.tblUsuario.getSelectedRow() == -1){
            JOptionPane.showMessageDialog(this, "Debe elegir una fila para modificar", "Información", JOptionPane.INFORMATION_MESSAGE);
        }
        else{
            int fila = this.tblUsuario.getSelectedRow();
            dlgModificarUsuario mdc = new dlgModificarUsuario(this, true, this.usuario, Integer.parseInt(this.tblUsuario.getValueAt(fila, 0).toString()));
            mdc.setVisible(true);
            this.consultarUsuariosPorFiltros();
        }
}//GEN-LAST:event_btnModificarActionPerformed

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        // TODO add your handling code here:
        if (this.tblUsuario.getSelectedRow() == -1)
            JOptionPane.showMessageDialog(this, "Debe elegir una fila para eliminar", "Información", JOptionPane.INFORMATION_MESSAGE);
        else{
            if (visualHelper.mostrarPreguntaSiNo("Esta seguro que desea eliminar el usuario?")==JOptionPane.YES_OPTION){
                try{
                    int fila = this.tblUsuario.getSelectedRow();
                    int codUsuario = Integer.parseInt(this.tblUsuario.getValueAt(fila, 0).toString());
                    beUsuario usuario = new beUsuario();
                    blUsuario gestorUsuarios = new blUsuario();
                    usuario = gestorUsuarios.queryById(codUsuario);

                    if (codUsuario==1){
                        visualHelper.mostrarMensajeAdvertencia("No se puede eliminar el usuario administrador.");
                        return;
                    }

                    if (this.usuario.getIngreso()){
                        visualHelper.mostrarMensajeAdvertencia("No se puede eliminar el usuario porque ya ha iniciado sesión.");
                        return;
                    }

                    if ((gestorUsuarios.eliminar(codUsuario)) == visualHelper.TRANSACCION_EXITOSA){
                        JOptionPane.showMessageDialog(this, "Se eliminó el usuario especificado","Información", JOptionPane.INFORMATION_MESSAGE);
                        (new blLog()).registrarLog(this.usuario.getIdUsuario(), this.usuario.getCargo(), "Se eliminó el usuario: "+usuario.getIdUsuario()+" - "+usuario.getNombre());
                    }
                    else
                        visualHelper.mostrarMensajeError("No se puede eliminar el usuario.");
                    this.consultarUsuariosPorFiltros();
                }
                catch (Exception e){
                    e.printStackTrace();
                    visualHelper.mostrarMensajeError("Ocurrió un error al eliminar.");
                }
            }
        }

    }//GEN-LAST:event_btnEliminarActionPerformed

    private void limpiarTabla(DefaultTableModel dtm) {
        int numFilas = dtm.getRowCount();
        for(int i=(numFilas-1);i>=0;i--)
            dtm.removeRow(i);
    }


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnBuscar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JButton btnRegistrar;
    private javax.swing.JComboBox cboPerfil;
    private javax.swing.JLabel imgInicio;
    private javax.swing.JLabel imgInicio1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblCargo;
    private javax.swing.JLabel lblNombre;
    private javax.swing.JLabel lblNombre1;
    private javax.swing.JLabel lblPerfil;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JLabel lblTitulo1;
    private javax.swing.JLabel lblTitulo2;
    private javax.swing.JLabel lblTitulo3;
    private javax.swing.JLabel lblTitulo4;
    private java.awt.Panel panel1;
    private javax.swing.JPanel pnlBusqueda;
    private javax.swing.JPanel pnlInicio;
    private javax.swing.JPanel pnlInicio1;
    private javax.swing.JTable tblUsuario;
    private javax.swing.JTextField txtCargo;
    private javax.swing.JTextField txtNombre;
    // End of variables declaration//GEN-END:variables

    private void jtextFielKeyTyped (KeyEvent ev){
        visualHelper.ningunCaracterEnTextField(ev);
    }

    public JTable getTblUsuario() {
        return tblUsuario;
    }

    public void setTblUsuario(JTable tblUsuario) {
        this.tblUsuario = tblUsuario;
    }
}
